namespace PluginFrame
{
	public interface IExperimentController
	{
		ExperimentState State { get; set; }

		bool HoldingTimeZero { get; set; }

		IConfigurationService ConfigurationService { get; }

		double AvgTubeTemperature { get; }

		double AvgBlockTemperature { get; }

		double AvgHotLidTemperature { get; }

		double[] SubModuleBlockTemperatures { get; }

		IPcrExperiment PcrExperiment { get; }

		bool IsForceToSkipSegment { get; set; }

		void SwitchButtonText(string text);

		void SwitchButtonEnable(bool isEnable);

		void ExecuteProgramOrder();

		void ExecuteStartOrder();

		void ExecuteStopOrder();

		void StartExperimentManagerService();

		void HoldTimeSubtractSecond();

		bool CheckHotLidTemperatureArrived();

		bool CheckSendDetectionOrder();

		ExperimentState CreateTemperatureStepState(bool temperatureArrived);

		void SwitchToReadyView();

		void RefreshStopStatus(string resultString);

		void SwtichExperimentProccessView();

		void RegisterManagerTickAddEvent();

		void RemoveManagerTickAddEvent();

		bool CheckExperimentProgram();

		bool CheckExperimentPort();

		bool InitializeBeforeStartExperiment();

		double GetAvgSubModuleTubeTemperature(int subModuleIndex);

		double GetAvgSubModuleBlockTemperature(int subModuleIndex);

		double GetAvgModuleHotLidTemperature(int subModuleIndex);

		double TemperatureDeviation();

		bool TemperatureWithinDeviation();

		bool TemperatureExceedDeviation();

		int TemperatureDeviationMaxSecond();

		void ChangeCycle(int SegmentIndex, int cycleCount);

		void AddStep(int segmentIndex, double temperature, int holdTime);

		void ButtonClickStartExperiment();

		ModuleStatus GetModuleStatus(int moduleIndex);

		void RefreshRunningPhase(string label);

		void FindCommunicationErrorFromDeivce();
	}
}
